package tiny.soft.com.common.exception;

import lombok.Data;

/**
 * 统一异常，在RestService抛出会有统一处理
 * @ClassName BusinessException
 * @Author 柳时光
 * @Date 2019/4/19 12:43
 * @Version 1.0
 **/
@Data
//@EqualsAndHashCode(callSuper = false)
public class BusinessException extends RuntimeException {

    /** 错误编码*/
    private String errorCode;

    /** 是否时重新抛出的异常*/
    private boolean reThrow;

    /** 是否打印异常信息*/
    private boolean printStackTrace;


    /**
      * 业务异常。统一异常处理（controller的切面）会打印异常堆栈。
      * @Author 柳时光
      * @Date 2019/4/22 16:11
      * @param errorCode 错误码，用于页面展示
      * @param msg 错误信息
      * @param reThrow true/false 是否是重新抛出的异常
      * @return
      **/
    public BusinessException(String errorCode, String msg, boolean reThrow){
        super(msg);
        this.errorCode = errorCode;
        this.reThrow = reThrow;
        this.printStackTrace = true;
    }

    /**
      * 业务异常构造方法，默认不打印堆栈信息。
      * @Author 柳时光
      * @Date 2019/4/22 16:15
      * @param errorCode 错误码，用于页面展示
      * @param msg 错误信息
      * @return
      **/
    public BusinessException(String errorCode, String msg){
        super(msg);
        this.errorCode = errorCode;
        this.reThrow = false;
        this.printStackTrace = false;
    }

    /**
      * 设置打印异常信息
      * @Author 柳时光
      * @Date 2019/4/22 17:28
      * @param
      * @return com.hysoft.exception.BusinessException
      **/
    public BusinessException setPrintStackTraceTrue(){
        this.printStackTrace = true;
        return this;
    }
}
